<?php


class SvcCRUDConnected extends SvcCommun {
    
    
    
    protected static $bodyCssClass='crud';
    
    
    
    const LISTER=1;
    const EDITER=2;
    
    const ANCHOR_LIST='a_list';
    const ANCHOR_EDIT='a_edit';
    
    private static $classe;
    
    

    
    public static function verifier(){
	
	if(!Security::isConnected()){
	    Security::notAllowedPage();
	}
	
	$classe=self::getClass();
	
	if(isset($_GET['action'])){
	    if($_GET['action']=='delete'){
		    if(Security::isConnected()){
			    self::applyDeleteCRUD($classe);
		    }
	    }
	}
	if(isset($_POST['action'])){
	    if($_POST['action']=='save'){
		    if(Security::isConnected()){
			    self::applySaveCRUD($classe);
		    }
	    }
	}
	
	self::$title=$classe::getTitre('main');
	self::$classe=$classe;
    }
    
    
	
    private static function getClass(){
	$class=Form::getParam(Admin::$requestParam);
	if($class){
	    if(array_key_exists($class,Admin::$listeClasses)){
		Session::setValue('adminClass',$class);
	    }
	    else{
		Security::notAllowedPage();
	    }
	}
	else{
	    $class=Session::getValue('adminClass');
	}
	return $class;
    }
    
    
    
    
    private static function redirect($direction){
	switch($direction){
	    case self::LISTER: Navig::redirect(Navig::getPageName().'#'.self::ANCHOR_LIST); break;
	    case self::EDITER: Navig::redirect(Navig::getPageName().'#'.self::ANCHOR_EDIT); break;
	}
    }
	
	
	
    private static function applyDeleteCRUD($class){
	if(isset($class::$blockDelete)){
	    Message::error("Un élément $class ne peut pas être supprimé");
	}
	else{
	    //pour supprimer un élément, il faut le trouver en base
	    if(isset($_GET['id'])){
		$selected=$class::load($_GET['id']);
		if($selected != null){
		    if($selected->delete()){
			Message::info('Suppression réalisée avec succès');
		    }
		    else{
			Message::error("La suppression n'a pas fonctionné");
		    }
		    self::redirect(self::LISTER);
		}
	    }
	}
    }
	
    private static function applySaveCRUD($class){
	$entity=new $class();
	
	//on vérifie si on est en mode édition
	if(isset($_GET['id'])){
	    $selected=$class::load($_GET['id']);
	    if($selected != null){
		$isEdit = true;
		$entity = $selected;
	    }
	}
	
	$entity->populate($_POST);
	
	if($entity->save()){
	    Message::info('Enregistrement réalisé avec succès');
	    if(!Main::showDebug()) self::redirect(self::LISTER);
	}
	else{
	    Message::error("L'enregistrement n'a pas fonctionné");
	}
    }
    
	
    public static function getCRUDNavigPanel(){
	$class=self::$classe;
	$page=Navig::getPageName();
	$titreList=Texte::toHtml($class::getTitre('list'));
	
	$navig='<div class="navigation">'.PHP_EOL;
	$navig.="<a href='$page".'#'.self::ANCHOR_LIST."'>$titreList</a>".PHP_EOL;
	if(!isset($class::$blockCreate)){
	    $titreCreate=Texte::toHtml($class::getTitre('new'));
	    $navig.='<span> - </span>'.PHP_EOL;
	    $navig.="<a href='$page".'#'.self::ANCHOR_EDIT."'>$titreCreate</a>".PHP_EOL;
	}
	$navig.='</div>'.PHP_EOL;
	
	return $navig;
    }
	
	
    public static function getMeta($param='comment'){
	$class=self::$classe;
	return $class::getMeta($param);
    }
	
	
    public static function getListTable(){
	$class=self::$classe;
	return $class::getListTable();
    }
	
	
    public static function getFormulaire(){
	$class=self::$classe;
	return $class::getFormulaire();
    }
    
    
}


?>